/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.component.gateway.dianlan.protocol.passive;

import info.peigen.hotpot.component.gateway.dianlan.facade.enums.DianlanWaterCoolingUnitBmsRequestMode;
import info.peigen.hotpot.component.gateway.dianlan.facade.enums.DianlanWaterCoolingUnitBmsThermalManagementRelayStatus;
import info.peigen.hotpot.component.gateway.dianlan.facade.enums.DianlanWaterCoolingUnitChargingStatus;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

/**
 * <b>(DianlanWaterCoolingUnitControlDataGram)</b>
 * <p>
 * 水冷机组控制报文
 * <pre>
 * 字节  位         名称              参数说明
 * 1    8-7     BMS热管理继电器状态    00断开01闭合10无效11无效
 *      6-5     充电状态              00非充电状态01充电状态10无效11无效
 *      4-3     预留
 *      2-1     BMS请求设定模式        00关机模式01制冷模式10制热模式11自循环模式
 * 4-2  4.8-2.1 保留                 保留
 * 5    8-1     设定水温              分辨率： 1℃/bit  偏移量：-40℃ 0xFF：无效
 * 6    8-1     保留                 保留
 * 7    8-1     BMS生命帧             0~255
 * 8    8-1     预留
 * </pre>
 *
 * @author LiDaHai
 * @version 1.0.0
 * @since 2023/1/12
 */
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class DianlanWaterCoolingUnitControlDataGram {
    /** BMS请求设定模式 */
    DianlanWaterCoolingUnitBmsRequestMode                  bmsRequestMode;
    /** 预留 */
    String                                                 reserve;
    /** 水冷机组-充电状态 */
    DianlanWaterCoolingUnitChargingStatus                  chargingStatus;
    /** 水冷机组-BMS热管理继电器状态 */
    DianlanWaterCoolingUnitBmsThermalManagementRelayStatus bmsThermalManagementRelayStatus;
    /** 保留 */
    String                                                 reserve1;
    /** 设定水温（℃） */
    Integer                                                waterTemperature;
    /** 保留 */
    String                                                 reserve2;
    /** BMS生命帧 */
    String                                                 bmsLifeFrame;
    /** 保留 */
    String                                                 reserve3;

    public String toString() {
        return "BMS请求设定模式：" + bmsRequestMode.getMessage() + "，" +
                "水冷机组-充电状态：" + chargingStatus.getMessage() + "，" +
                "BMS热管理继电器状态：" + bmsThermalManagementRelayStatus.getMessage() + "，" +
                "设定水温：" + waterTemperature + "℃" + "，" +
                "BMS生命帧：" + bmsLifeFrame;
    }
}